window: Make sure the decoration node stays at the beginning
authorTimm Bäder <mail@baedert.org>
Fri, 7 Apr 2017 18:13:42 +0000 (20:13 +0200)
committerTimm Bäder <mail@baedert.org>
Tue, 25 Apr 2017 18:30:36 +0000 (20:30 +0200)
Otherwise, the gtk_widget_set_parent call might add the widget node of
the child before the decoration node.

gtk/gtkwindow.c

index 0c636896eb53b49917e51cd883894b3c5ef49983..ce3da22dcd9a71498cea3cc1d29a38654d0e7023 100644 (file)
@@ -727,6 +727,17 @@ gtk_window_measure (GtkWidget      *widget,
     }
 }
 
+static void
+gtk_window_add (GtkContainer *container,
+                GtkWidget    *child)
+{
+  /* Insert the child's css node now at the end so the order wrt. decoration_node is correct */
+  gtk_css_node_insert_before (gtk_widget_get_css_node (GTK_WIDGET (container)),
+                              gtk_widget_get_css_node (child),
+                              NULL);
+
+  GTK_CONTAINER_CLASS (gtk_window_parent_class)->add (container, child);
+}
 
 static void
 gtk_window_class_init (GtkWindowClass *klass)
@@ -774,6 +785,7 @@ gtk_window_class_init (GtkWindowClass *klass)
   widget_class->snapshot = gtk_window_snapshot;
   widget_class->queue_draw_region = gtk_window_queue_draw_region;
 
+  container_class->add = gtk_window_add;
   container_class->remove = gtk_window_remove;
   container_class->check_resize = gtk_window_check_resize;
   container_class->forall = gtk_window_forall;
@@ -4010,6 +4022,11 @@ gtk_window_set_titlebar (GtkWindow *window,
 
   gtk_window_enable_csd (window);
   priv->title_box = titlebar;
+  /* Same reason as in gtk_window_add */
+  gtk_css_node_insert_before (gtk_widget_get_css_node (GTK_WIDGET (window)),
+                              gtk_widget_get_css_node (titlebar),
+                              NULL);
+
   gtk_widget_set_parent (priv->title_box, widget);
   if (GTK_IS_HEADER_BAR (titlebar))
     {